"""
列表
'兼收并蓄'
兼：同时涉及或具有几种事物。收：接收，收罗。蓄：保存。
把内容不同、性质不同的东西都吸收保存起来。
"""
nums = [1, 2, 3, 4, 5]
print(nums)

# 与字符串相同 列表也是一个序列 也可以迭代
for num in nums:
    print(num)

# 还支持下标查询
print(nums[1])  # 2
print(nums[4])  # 5
print(nums[-1])  # 5 -1表示倒数第一个元素
print(nums[len(nums) - 1])  # 5

"""
列表切片
"""
print(nums[0:3])  # [1, 2, 3] 表示从零开始取三个
print(nums[:3])  # [1, 2, 3] 实际上第一个默认为零可以省略
print(nums[3:])  # [4, 5] 从下标3开始取到最后一个
print(nums[:])  # [1, 2, 3, 4, 5]
print(nums[::2])  # [1, 3, 5] 甚至可以设置步长
print(nums[::-2])  # [5, 3, 1] 可以倒序设置步长 （按列表顺序）
print(nums[::-1])  # [5, 4, 3, 2, 1] 可以借助上一个技巧进行倒序 输出

"""
改
"""
heroes = ['死侍', '星爵', '蜘蛛侠', '金刚狼', '鹰眼', '夜魔侠', '杜姆博士', '绯红女巫']

heroes[0] = '死侍'
print(heroes)
# ['死侍', '蜘蛛侠', '金刚狼', '鹰眼', '夜魔侠', '杜姆博士', '绯红女巫']

# 通过切片实现替换多个
heroes[:] = ['武松', '鲁智深', '林冲']  # 这里就是全部替换了

print(heroes)  # ['武松', '鲁智深', '林冲']

# 排序
nums = [1, 2, 4, 6, 5, 3, 7, 8, 3, 5, 6, 7, 2, 6]
print(nums)
# sort()
# [1, 2, 4, 6, 5, 3, 7, 8, 3, 5, 6, 7, 2, 6]
nums.sort()
print(nums)
# [1, 2, 2, 3, 3, 4, 5, 5, 6, 6, 6, 7, 7, 8]

# nums.sort(reverse=True)  这样也可以获得反序的效果
# print(nums)
# [8, 7, 7, 6, 6, 6, 5, 5, 4, 3, 3, 2, 2, 1]

# 反序 reverse() 也就是第一个跟最后一个互换 第二个跟倒数第二个互换 以此类推
nums.reverse()
print(nums)
# [8, 7, 7, 6, 6, 6, 5, 5, 4, 3, 3, 2, 2, 1]
heroes.reverse()
print(heroes)  # ['林冲', '鲁智深', '武松']

# 得到列表中指定元素的个数 count()
six_count = nums.count(6)
print(six_count)  # 3

# 得到列表中指定元素的下标 返回 第一个 符合的元素的 下标 index(指定元素，开始位置，结束位置)
six_index = nums.index(6)
print(six_index)  # 3

# 复制整个列表 copy()
nums_copy1 = nums.copy()
print(nums_copy1)
# [8, 7, 7, 6, 6, 6, 5, 5, 4, 3, 3, 2, 2, 1]
# 可以使用切片实现同样的效果
nums_copy2 = nums[:]
print(nums_copy2)
# [8, 7, 7, 6, 6, 6, 5, 5, 4, 3, 3, 2, 2, 1]
# 以上都是 浅 拷贝 深拷贝以后再见

# 列表的拼接
l1 = [1, 2, 3, 4]
l2 = [6, 7, 8, 9]
# 加法
l3 = l1 + l2
print(l3)
# [1, 2, 3, 4, 6, 7, 8, 9]
# 乘法
l4 = l1 * 3
print(l4)
# [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]

# 嵌套列表 (高维列表)
l_sq = [l1, l2]
print(l_sq)
# [[1, 2, 3, 4], [6, 7, 8, 9]]
# 访问嵌套列表
for list in l_sq:
    for val in list:
        print(val, end=" ")
    print()
# 1 2 3 4
# 6 7 8 9

l5 = l_sq[0]
print(l5)  # [1, 2, 3, 4]
print(l_sq[0][2])  # 3
